iOS および Android では、安全でない HTTP 接続がデフォルトで無効になっています
まとめ
コードがホストへの HTTP 接続を開こうとした場合
iOS または Android では、StateException
で投げられるようになりました
次のメッセージ:
Insecure HTTP is not allowed by platform: <host>
代わりに HTTPS を使用してください。
コンテクスト
アンドロイドから始めるAPI 28とiOS9、 これらのプラットフォームでは、安全でない HTTP 接続がデフォルトで無効になっています。
この変更により、Flutter は安全でない接続も無効にします。 モバイルプラットフォーム。他のプラットフォーム (デスクトップ、Web など) 影響を受けません。
次のようにして、この動作をオーバーライドできます。 ドメイン固有を定義するためのプラットフォーム固有のガイドライン ネットワークポリシー。詳細については、以下の移行ガイドを参照してください。
プラットフォームと同様に、アプリケーションも引き続き開くことができます 安全でないソケット接続。 Flutter は強制しません ソケットレベルのポリシー。あなたはそうでしょう 接続を保護する責任があります。
移行ガイド
iOS では、次のことを追加できますNSExceptionDomainsあなたへ アプリケーションの Info.plist。
Android では、ネットワークセキュリティ構成XML。
Flutter が XML ファイルを見つけるには、metadata
へのエントリー<application>
マニフェスト内のタグ。
このメタデータ エントリには次の名前を付ける必要があります。io.flutter.network-policy
が含まれている必要があります
XMLのリソース識別子。
たとえば、XML 設定を以下に置くと、res/xml/network_security_config.xml
、
マニフェストには次のものが含まれます。
<application ...>
...
<meta-data android:name="io.flutter.network-policy"
android:resource="@xml/network_security_config"/>
</application>
デバッグビルドのクリアテキスト接続を許可する
Android デバッグ用に HTTP 接続を許可したい場合 ビルドする場合は、次のスニペットを $project_path\android\app\src\debug\AndroidManifest.xml に追加できます。
<application android:usesCleartextTraffic="true"/>
iOSの場合は、次の手順を実行できますこれらの指示を作成するInfo-debug.plist
これを次のように入力します。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
私たちしないリリース ビルドに対してこれを行うことをお勧めします。
追加情報
- 変更する唯一の方法はビルド時の構成です ネットワークポリシー。実行時に変更することはできません。
- ローカルホスト接続は常に許可されます。
- 安全でない接続はドメインに対してのみ許可できます。 特定の IP アドレスは入力として受け入れられません。 これはプラットフォームのサポート内容と一致しています。もしそうしていただければ IP アドレスを許可したい場合、唯一のオプションは許可することです アプリ内のクリアテキスト接続。
タイムライン
リリースされたバージョン: 1.23
安定版リリース: 2.0.0
バージョンで元に戻されました: 2.2.0 (提案)
参考文献
API ドキュメント: この変更に対応する API はありません。 ネットワーク ポリシーの変更は、 上で詳しく説明したプラットフォーム固有の構成。
関連する PR:
- PR 20218: ドメイン ネットワーク ポリシーを設定するための配管
- 厳密に安全な接続のためのドメインごとのポリシーの導入